using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._LayersandTableViews
{
    /// <summary>
    /// <para>Match Layer Symbology To A Style</para>
    /// <para>Creates unique value symbology for the input layer based on the input field or expression by matching input field or expression strings to symbol names from the input style.</para>
    /// <para>通过将输入字段或表达式字符串与输入样式中的符号名称进行匹配，基于输入字段或表达式为输入图层创建唯一值符号系统。</para>
    /// </summary>    
    [DisplayName("Match Layer Symbology To A Style")]
    public class MatchLayerSymbologyToAStyle : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public MatchLayerSymbologyToAStyle()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_layer">
        /// <para>Input Layer</para>
        /// <para>The input layer or layer file to which matched symbols are applied as unique values symbol classes. The input layer can contain point, line, polygon, multipoint, or multipatch symbology. Existing symbology on the layer is overwritten.</para>
        /// <para>将匹配的符号作为唯一值符号类应用到的输入图层或图层文件。输入图层可以包含点、线、面、多点或多面体符号系统。图层上的现有符号系统将被覆盖。</para>
        /// </param>
        /// <param name="_match_values">
        /// <para>Match Values (Field or Expression)</para>
        /// <para>The field or expression on which the input layer is symbolized. The field values or resultant expression values are matched to symbol names in the specified style to assign symbols to the resulting symbol classes.</para>
        /// <para>符号化输入图层的字段或表达式。字段值或生成的表达式值与指定样式中的符号名称匹配，以便将符号分配给生成的符号类。</para>
        /// </param>
        /// <param name="_in_style">
        /// <para>Style</para>
        /// <para>The style containing symbols with names matching the field or expression values.</para>
        /// <para>包含名称与字段或表达式值匹配的符号的样式。</para>
        /// </param>
        public MatchLayerSymbologyToAStyle(object _in_layer, object _match_values, object _in_style)
        {
            this._in_layer = _in_layer;
            this._match_values = _match_values;
            this._in_style = _in_style;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Match Layer Symbology To A Style";

        public override string CallName => "management.MatchLayerSymbologyToAStyle";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_layer, _match_values, _in_style, _out_layer];

        /// <summary>
        /// <para>Input Layer</para>
        /// <para>The input layer or layer file to which matched symbols are applied as unique values symbol classes. The input layer can contain point, line, polygon, multipoint, or multipatch symbology. Existing symbology on the layer is overwritten.</para>
        /// <para>将匹配的符号作为唯一值符号类应用到的输入图层或图层文件。输入图层可以包含点、线、面、多点或多面体符号系统。图层上的现有符号系统将被覆盖。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_layer { get; set; }


        /// <summary>
        /// <para>Match Values (Field or Expression)</para>
        /// <para>The field or expression on which the input layer is symbolized. The field values or resultant expression values are matched to symbol names in the specified style to assign symbols to the resulting symbol classes.</para>
        /// <para>符号化输入图层的字段或表达式。字段值或生成的表达式值与指定样式中的符号名称匹配，以便将符号分配给生成的符号类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Match Values (Field or Expression)")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _match_values { get; set; }


        /// <summary>
        /// <para>Style</para>
        /// <para>The style containing symbols with names matching the field or expression values.</para>
        /// <para>包含名称与字段或表达式值匹配的符号的样式。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Style")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_style { get; set; }


        /// <summary>
        /// <para>Output Layer</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Layer")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_layer { get; set; }


        public MatchLayerSymbologyToAStyle SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}